package cn.nn200433.mqtt.util;


import cn.hutool.extra.spring.SpringUtil;
import cn.nn200433.mqtt.core.MyMqttClient;

/**
 * mqtt 工具类
 *
 * @author nn200433
 * @date 2022-06-28 028 10:43:19
 */
public class MQTTUtil {

    /**
     * 订阅某个主题，qos默认为0
     *
     * @param topicFilter 主题
     */
    public static void subscribe(String topicFilter) {
        getMqttClient().subscribe(topicFilter);
    }

    /**
     * 订阅某个主题
     *
     * @param topicFilter 主题
     * @param qos         服务质量
     * @author nn200433
     */
    public static void subscribe(String topicFilter, int qos) {
        getMqttClient().subscribe(topicFilter, qos);
    }

    /**
     * 退订主题
     *
     * @param topicFilter 主题
     * @author nn200433
     */
    public static void unsubscribe(String topicFilter) {
        getMqttClient().unsubscribe(topicFilter);
    }

    /**
     * 退订一批主题
     *
     * @param topicFilter 主题
     * @author nn200433
     */
    public static void unsubscribe(String[] topicFilter) {
        getMqttClient().unsubscribe(topicFilter);
    }

    /**
     * 发布，默认qos为0，非持久化
     *
     * @param topic 主题
     * @param body  消息体
     * @author nn200433
     */
    public static void publish(String topic, String body) {
        getMqttClient().publish(topic, body);
    }

    /**
     * 发布
     *
     * @param topic    主题
     * @param body     消息体
     * @param qos      服务质量
     * @param retained 是否保留
     * @author nn200433
     */
    public static void publish(String topic, String body, Integer qos, Boolean retained) {
        getMqttClient().publish(topic, body, qos, retained);
    }

    private static MyMqttClient getMqttClient() {
        return SpringUtil.getBean(MyMqttClient.class);
    }

}
